Builder pattern 常常也被叫做 adapter
,主要目的是提供一種根據情況 return,給 class 或 instance 的簡單方法,通常被拿來解析文件的內容,可以依照以下的方式來建立一個 builder:
app/parsers
folderapp > parsers > base_parser.rb
# frozen_string_literal: true
class BaseParser
def initialize(file_path)
@file_path = file_path
end
end
app > parsers > file_parser.rb
# frozen_string_literal: true
class FileParser
def self.build(file_path)
case File.extname(file_path)
when ".csv" then CsvFileParser.new(file_path)
when ".xls" then XlsFileParser.new(file_path)
else
raise(UnknownFileFormat)
end
end
end
註: extname - https://apidock.com/ruby/File/extname/class
app > parsers > csv_file_parser.rb
class CsvFileParser < BaseParser
def rows
# parse rows
end
end
app > parsers > xls_file_parser.rb
class XlsFileParser < BaseParser
def rows
# parse rows
end
end
再來,只需要 build 後,就可以取得 parser 底下的 rows,再根據要取得的資料做對應的 code 即可。
parser = FileParser.build(file_path)
rows = parser.rows